package com.couldsail.takeaway.utils;

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Random;
import java.util.concurrent.atomic.AtomicInteger;

public class UniqueIdGenerator {

    // 使用AtomicInteger保证在高并发情况下也能安全地递增
    private static final AtomicInteger counter = new AtomicInteger(new Random().nextInt());

    /**
     * 生成一个16位不重复的纯数字ID。
     * @return 16位的字符串形式的数字ID
     */
    public static String generateUniqueId() {
        // 获取当前时间戳（精确到毫秒）
        SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmssSSS");
        String timestamp = sdf.format(new Date());

        // 生成一个4位的随机数（不足4位前面补0）
        int randomPart = new Random().nextInt(10000); // 0 到 9999
        String randomStr = String.format("%04d", randomPart);

        // 如果需要更高的唯一性，可以再加上一个自增的部分
        int incrementPart = counter.incrementAndGet();
        String incrementStr = String.format("%02d", incrementPart % 100); // 取模以限制长度

        // 组合时间戳、随机数和自增部分，确保总长度为16位
        return timestamp.substring(0, 10) + randomStr + incrementStr;
    }

    public static void main(String[] args) {
        // 测试生成多个ID
        for (int i = 0; i < 5; i++) {
            System.out.println(generateUniqueId());
        }
    }
}